ALU_Asrc ALU_Bsrc MemtoReg
这三个信号对应三个多路选择器(mux), 如图中蓝色的单元所示. 它们的功能是有多个输入, 根据信号的状态选择其中一个作为输出ALUop MemOp
这两个信号会被传递给 ALU 控制单元 和 存储器控制单元, 会交给控制单元去处理, 类似 ALU 中的加减乘除等运算, Mem 中的 1/2/4字节读写的选择RegWrite MemRead MemWrite
这三个信号仅有 0 和 1 两个状态, 类似于开关PCsrc 并没有在图中画出来, 这个稍微有点复杂, 后文结合跳转指令再提
根据这些控制信号可以得出系统在给定指令下的一个周期内所需要做的具体操作, 应该选择哪一个作为输入, 是否应该写, 是否应该读, ALU 做何种计算等等. 这时候我们就可以回答第一个问题 "其他信息(others)指的是什么?", 或者与此等价的问题 "每一阶段的 IR 都保留了哪些值?"
long __vdso_getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *unused)
{
vdso_read_cpunode(cpu, node);
return 0;
}
long getcpu(unsigned *cpu, unsigned *node, struct getcpu_cache *tcache)
__attribute__((weak, alias("__vdso_getcpu")));
因为高速缓存电路必须并行的遍历所有行,匹配所有标记位,所以构造一个又大又快的相联高速缓存困难且昂贵,因此全相联高速缓存指适合做小的高速缓存, 例如虚拟内存中的快表TLB
处理器在进行存储器访问时,处理器访问的地址是虚拟地址,经过MMU的转换,得到物理地址.那么查询cache组是用虚拟地址还是物理地址的Index域呢?当找到cache组时,使用虚拟地址,还是物理地址的Tag域来匹配cache line呢?
有如下三种策略:
VIVT/VIPT/PIPT的优缺点分析: